範例一:[3,4,5,1,2]
l=0,r=4 → m=2,a[m]=5,a[r]=2 ⇒ a[m]>a[r] → l=3
l=3,r=4 → m=3,a[m]=1,a[r]=2 ⇒ a[m]≤a[r] → r=3
l==r==3,最小值=1
class Solution{//153 O(log n) O(1)
public:
int findMin(vector<int>& a){ //旋轉升序陣列
int l=0,r=(int)a.size()-1; //邊界
while(l<r){ //至少兩個元素二分
int m=(l+r)>>1; //中點
if(a[m]<=a[r]) r=m; //右半已排,最小不在右半內,右界收至m
else l=m+1; //否則最小在右半,左界m+1
}
return a[l]; //l==r最小值
}
};